#include <iostream>
#include "Core/MaggotApp.h"
#include "Scene/LocalScene.h"
#include "Scene/LocalProcess.h"

#include "Scene/ResourceProcess.h"
#include "Scene/GBufferProcess.h"

#include "Scene/Shadows/ShadowsRayTraceProcess.h"
#include "Scene/Shadows/ShadowsDenoiseResetArgsProcess.h"
#include "Scene/Shadows/ShadowsTemporalAccumulationProcess.h"
#include "Scene/Shadows/ShadowsAtrousFilterProcess.h"

#include "Scene/AO/AORayTraceProcess.h"
#include "Scene/AO/AoDenoiseResetArgsProcess.h"
#include "Scene/AO/AoTemporalAccumulationProcess.h"
#include "Scene/AO/AoDenoiseBilateralBlurProcess.h"

#include "Scene/DDGI/DdgiRayTraceProcess.h"
#include "Scene/DDGI/DdgiProbeUpdateProcess.h"
#include "Scene/DDGI/DdgiBorderUpdateProcess.h"
#include "Scene/DDGI/DdgiSampleProbeGridProcess.h"

#include "Scene/Cubemap/SphericalHarmonicsProcess.h"
#include "Scene/Cubemap/PrefilterProcess.h"

#include "Scene/Reflections/ReflectionsRayTraceProcess.h"
#include "Scene/Reflections/ReflectionsDenoiseResetArgsProcess.h"
#include "Scene/Reflections/ReflectionsTemporalAccumulationProcess.h"
#include "Scene/Reflections/ReflectionsAtrousFilterProcess.h"

#include "Game/Process/CoordinateProcess.h"
#include "Scene/PreViewProcess.h"

#include "Render/Shader/GlobalShader.inl"
#include "Scene/LocalShader.inl"

int main()
{
	MaggotApp::Get().SetWindowTitle(L"Moggot Engine");
	MaggotApp::Get().SetWindowSize(1600, 900);
	MaggotApp::Get().SetGameScene<LocalScene>();
	MaggotApp::Get().AddRenderProcess<ResourceProcess>();
	MaggotApp::Get().AddRenderProcess<GBufferProcess>();

	MaggotApp::Get().AddRenderProcess<ShadowsRayTraceProcess>();
	MaggotApp::Get().AddRenderProcess<ShadowsDenoiseResetArgsProcess>();
	MaggotApp::Get().AddRenderProcess<ShadowsTemporalAccumulationProcess>();
	MaggotApp::Get().AddRenderProcess<ShadowsAtrousFilterProcess>();

	MaggotApp::Get().AddRenderProcess<AoRayTraceProcess>();
	MaggotApp::Get().AddRenderProcess<AoDenoiseResetArgsProcess>();
	MaggotApp::Get().AddRenderProcess<AoTemporalAccumulationProcess>();
	MaggotApp::Get().AddRenderProcess<AoDenoiseBilateralBlurProcess>();

	MaggotApp::Get().AddRenderProcess<DdgiRayTraceProcess>();
	MaggotApp::Get().AddRenderProcess<DdgiProbeUpdateProcess>();
	MaggotApp::Get().AddRenderProcess<DdgiBorderUpdateProcess>();
	MaggotApp::Get().AddRenderProcess<DdgiSampleProbeGridProcess>();

	MaggotApp::Get().AddRenderProcess<SphericalHarmonicsProcess>();
	MaggotApp::Get().AddRenderProcess<PrefilterProcess>();

	MaggotApp::Get().AddRenderProcess<ReflectionsRayTraceProcess>();
	MaggotApp::Get().AddRenderProcess<ReflectionsDenoiseResetArgsProcess>();
	MaggotApp::Get().AddRenderProcess<ReflectionsTemporalAccumulationProcess>();
	MaggotApp::Get().AddRenderProcess<ReflectionsAtrousFilterProcess>();

	MaggotApp::Get().AddRenderProcess<PreViewProcess>();
	MaggotApp::Get().AddRenderProcess<CoordinateProcess>("PreViewProcess");
	MaggotApp::Get().Run();
	return 0;
}
